package com.ebo.pay;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.alipay.sdk.app.PayTask;
import com.ebo.agora.openvcall.IBaseActivity;
import com.ebo.pay.alipay.PayResult;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.Map;

import http_utils.interfaces.IHttpPostListener;
import http_utils.utils.Ipost;
import io.agora.openvcall.R;
import utils.IToast;
import utils.Lg;
import utils.Pub;

public class PayActivity extends IBaseActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pay);
        initViews();
    }

    Button btn_pay;
    EditText et_uid, et_token, et_orderid;

    void initViews() {
        btn_pay = (Button) findViewById(R.id.pay);
        btn_pay.setOnClickListener(this);
        et_uid = (EditText) findViewById(R.id.uid);
        et_token = (EditText) findViewById(R.id.token);
        et_orderid = (EditText) findViewById(R.id.order_id);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.pay:
                Pub.send_GetOrder(this, et_uid.getText().toString(), et_orderid.getText().toString(), et_token.getText().toString(), new PostGetOrder());
                break;
        }
    }


    //网络协议start======================================================================
    String strOrderInfo_Ali;

    private String wx_out_trade_no = "";
    private float wx_total_amount = 0.01f;
    private String sfpayUrl = "";

    //获取订单
    class PostGetOrder implements IHttpPostListener {
        @Override
        public void responseSuccess(String result) {
            if (Ipost.isTimeOut(PayActivity.this, result)) {
                return;
            }
            Lg.d("result=" + result);
            if (null != result) {
                try {
                    JSONObject jb = new JSONObject(result);

                    if (jb.getInt("error") != 0) {

                        IToast.show(PayActivity.this, jb.getString("message"));
                        return;
                    }

                    strOrderInfo_Ali = jb.getString("alipay_info");
                    payAli(null);
                } catch (Exception e) {
                    // TODO: handle exception
                    IToast.show(PayActivity.this, "网络异常：\n" + e.toString());
                }
            }
        }
    }

    //网络协议end======================================================================











    //alipay===============================================================================
    private static final int SDK_PAY_FLAG = 1;
    @SuppressLint("HandlerLeak")
    private Handler mHandler = new Handler() {
        @SuppressWarnings("unused")
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case SDK_PAY_FLAG: {
                    @SuppressWarnings("unchecked")
                    PayResult payResult = new PayResult((Map<String, String>) msg.obj);
                    /**
                     对于支付结果，请商户依赖服务端的异步通知结果。同步通知结果，仅作为支付结束的通知。
                     */
                    String resultInfo = payResult.getResult();// 同步返回需要验证的信息
                    String resultStatus = payResult.getResultStatus();

                    // 判断resultStatus 为9000则代表支付成功
                    if (TextUtils.equals(resultStatus, "9000")) {
                        // 该笔订单是否真实支付成功，需要依赖服务端的异步通知。
                        //付费成功
                        String out_trade_no = "";// payResult.getOut_trade_no();
                        float total_amount = 0;// payResult.getTotal_amount();
                        try {
                            JSONObject j = new JSONObject(resultInfo);
                            Lg.d("j=" + j.toString());
                            JSONObject j2 = j.getJSONObject("alipay_trade_app_pay_response");
                            out_trade_no = j2.getString("out_trade_no");
                            total_amount = Float.valueOf(j2.getString("total_amount"));
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                        Lg.d("out_trade_no=" + out_trade_no + ",total_amount=" + total_amount);
//                        Pub.send_CheckOrder(PayActivity.this, out_trade_no, total_amount, new PostCheckOrder());

                    } else {
                        // 该笔订单真实的支付结果，需要依赖服务端的异步通知。
                        if (TextUtils.equals(resultStatus, "8000")) {
                            IToast.show(PayActivity.this, "正在处理中，支付结果未知（有可能已经支付成功），请查询商户订单列表中订单的支付状态");
                        } else if (TextUtils.equals(resultStatus, "4000")) {
                            IToast.show(PayActivity.this, "订单支付失败");
                        } else if (TextUtils.equals(resultStatus, "5000")) {
                            IToast.show(PayActivity.this, "重复请求");
                        } else if (TextUtils.equals(resultStatus, "6001")) {
                            IToast.show(PayActivity.this, "用户中途取消");
                        } else if (TextUtils.equals(resultStatus, "6002")) {
                            IToast.show(PayActivity.this, "网络连接出错");
                        } else if (TextUtils.equals(resultStatus, "6004")) {
                            IToast.show(PayActivity.this, "支付结果未知（有可能已经支付成功），请查询商户订单列表中订单的支付状态");
                        } else {
                            IToast.show(PayActivity.this, "支付失败，未知原因，请联系运营商");
                        }
                    }
                    break;
                }
                default:
                    break;
            }
        }

        ;
    };

    /**
     * 支付宝支付业务
     *
     * @param v
     */
    public void payAli(View v) {

        /**
         * 这里只是为了方便直接向商户展示支付宝的整个支付流程；所以Demo中加签过程直接放在客户端完成；
         * 真实App里，privateKey等数据严禁放在客户端，加签过程务必要放在服务端完成；
         * 防止商户私密数据泄露，造成不必要的资金损失，及面临各种安全风险；
         *
         * orderInfo的获取必须来自服务端；
         */
        Runnable payRunnable = new Runnable() {
            @Override
            public void run() {
                PayTask alipay = new PayTask(PayActivity.this);
                Map<String, String> result = alipay.payV2(strOrderInfo_Ali, true);
                Lg.d("map=" + result.toString());

                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };
        Thread payThread = new Thread(payRunnable);
        payThread.start();
    }

    //alipay end===============================================================================


}
